package com.zh.common.utils;

import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

public class FileUpdate {

    public static String uploadFile(MultipartFile file) throws Exception {
        //原来的文件上传，我们是将上传的文件保存到项目的一个目录下
        //现在，我们将文件上传到fastdfs分布式的文件系统服务器
        TrackerServer trackerServer = null;
        StorageServer storageServer = null;
        String[] array = new String[0];
        String str = "";
        try {
            //1.全局初始化fastdfs的客户端连接配置信息
            ClientGlobal.init("src/main/resources/fastdfs_client.conf");

            //2.创建一个tracker的客户端对象
            TrackerClient trackerClient = new TrackerClient();

            //3.获取一个Tracker服务器对象
            trackerServer = trackerClient.getConnection();

            //4.获取一个Storage服务器对象
            storageServer = trackerClient.getStoreStorage(trackerServer);

            //5.创建一个Storage客户端对象
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            //6.有了Storage客户端对象之后，就可以使用该对象进行fastdfs操作
            //文件1
            String originalFilename = file.getOriginalFilename();
            String extFileName = originalFilename.substring(originalFilename.indexOf(".") + 1);
            //上传
            array = storageClient.upload_file(file.getBytes(), extFileName, null);
            for (String str1 : array) {
                str = str + "/" + str1;

            }



            //文件上传之后，我们通常是将文件的完整访问路径更新到数据库表的字段里面
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭服务释放资源
                if (null != trackerServer) {
                    trackerServer.close();
                }
                if (null != storageServer) {
                    storageServer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return str;
    }
}
